"""
文字小部件。
"""
import typing
from ..framework import dispatch, session_received
from ..base import BaseSession, BaseSessionType, BaseSessionParentType
from .base import BaseTextWidget


@session_received
class WidgetText(BaseSession, BaseTextWidget):
    """
    文本小部件。
    """
    name = 'WidgetText'

    @classmethod
    async def create(cls: typing.Type[BaseSessionType], parent: BaseSessionParentType,
                     *args: typing.Any, **kwargs: typing.Dict) -> BaseSessionType:
        """
        五个参数：
        @width: 宽度；
        @height: 高度；
        @x: 左上角横坐标；
        @y: 左上角纵坐标；
        @text: 按钮的文字内容（可选，默认为None）
        使用方法：
        widget = await WidgetText.create(activity, 200, 50, 0, 0, '测试文本')
        """
        return await super().create(parent, *cls.parse_region_and_text(*args), **kwargs)

    async def on_receive(self, msg):
        """
        组件的事件转发。
        """
        await super().on_receive(msg)
        dispatch(super().on_widget_action(*msg.argv, name=msg.name, session_id=msg.session, future_id=msg.future))
